package org.liveboardgames.agricola.model.structure;

import org.liveboardgames.agricola.domain.action.Action;
import org.liveboardgames.agricola.domain.board.BoardTile;
import org.liveboardgames.agricola.domain.card.BakingImprovementCard;
import org.liveboardgames.agricola.domain.card.Card;
import org.liveboardgames.agricola.domain.card.CookingImprovementCard;
import org.liveboardgames.agricola.domain.card.ImprovementCard;
import org.liveboardgames.agricola.domain.common.AlternativeCost;
import org.liveboardgames.agricola.domain.farm.Farm;
import org.liveboardgames.agricola.domain.farm.FarmTile;
import org.liveboardgames.agricola.domain.player.Player;

public interface Visitor {

  void visit(Visitable visitable);

  void visit(Action action);

  void visit(Card card);

  void visit(Player player);

  void visit(Farm farm);

  void visit(FarmTile farmTile);

  void visit(BoardTile boardTile);

  void visit(BakingImprovementCard card);

  void visit(CookingImprovementCard card);

  void visit(ImprovementCard card);

  void visit(AlternativeCost cost);
}
